package com.huonan.component.thread;

import cn.hutool.core.collection.ListUtil;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;

/**
 * Supplier Function Consumer  Apply 函数
 */
public class FunctionInterface {

    /**
     * Consumer 是一个函数式接口
     * 1. 接收一个传入参数，不返回结果
     * 2. 消费或者处理数据
     */
    @Test
    public void ConsumerTest() {
        //定义函数
        Consumer<String> handler = str -> {
            System.out.println(str.toUpperCase());
        };
        //执行操作
        handler.accept("hello world");
    }

    @Test
    public void ConsumerTest2() {
        //定义函数
        List<Integer> towList = new ArrayList<>();
        Consumer<List<Integer>> handler = list -> {
            for (Integer integer : list) {
                if (integer%2==0) {
                    towList.add(integer);
                }
            }
        };
        FunctionInterface.getEven(handler);
        for (Integer integer : towList) {
            System.out.println(integer);
        }
    }

    public static void getEven(Consumer<List<Integer>> list) {
        list.accept(ListUtil.toList(1,2,3,4,5,6,7,8,9,10));
    }

    /**
     * Supplier
     * 不接受参数，只返回结果
     */
    @Test
    public  void SupplierTest(){
        Supplier<String> stringCopier = () -> "Hello World";
        System.out.printf(String.valueOf(stringCopier.get()));
    }

    @Test
    public void applyTest(){
        // 定义一个Function对象，将输入字符串转换为大写
        Function<String, String> toUpperCase = String::toUpperCase;

        // 使用apply方法执行转换操作
        String result = toUpperCase.apply("hello");
        System.out.println(result); // 输出: "HELLO"
    }

}
